<?php

require ('model.php');

/**
 * loginModel
 *
 * Esta classe contém as funções de acesso a dados do objeto login.
 *
 * @package 	Login
 * @category model
 * @name loginModel.php
 * @author Janaína Paixão <janainap@gmail.com>
 * @copyright Janaína Paixão
 * @license Software Poprietário
 * @version v1.0
 * @since v1.0
 **/

class loginModel extends Model
{


    /**
     * loginModel::verificaExistenciaUsuario()
     *
     * Verifica se existe um registro referente ao nome de usuário especificado.
     *
     * @access public
     * @author Janaína Paixão <janainap@gmail.com>
     * @since  v1.0
     */
    public function verificaExistenciaUsuario()
    {
        #Obtendo dado de identificação do usuário
        $usuario = $this->antiInjection($_POST['usuario']);


        #Instanciando entidade VsUsuarios
        $SisUsuarios = new SisUsuarios();



        #Obtendo dados de identificação do usuário
        $usuario = $this->antiInjection($_POST['usuario']);
        $senha = $this->antiInjection($_POST['senha']);


        #Criptografando senha para comparação no banco de dados
        $senha2="HpTarefas!@9".$senha."545421212"; 
        $senha = md5($senha2);
//echo $senha; exit();
        #Verificando se usuário e senha são válidos

        //Indica os parâmetros para a consulta
        $SisUsuarios->login = $usuario;
        $SisUsuarios->senha = $senha;


        //Faz a consulta
        try{
            
            $SisUsuarios->find(true); //Lumine_Util::showResult($SisUsuarios); 
          
        }catch (exception $e)
        { 
                $exception=$e->getCode()." - ";
                $exception.=$e->getMessage()."\n";
                $exception.="Arquivo: ".$e->getFile()."\n";
                $exception.="Linha: ".$e->getLine();
        	echo $exception; exit();
                $this->erro("--------------", "", "", "", $exception);

        }
        

        //Move o ponteiro para o próximo registro na lista de resultados
        $SisUsuarios->fetch();


        if (!empty($SisUsuarios->codigoUsuario))
        {
            return $SisUsuarios->codigoUsuario;
        } else
        {
            return false;
        }


    }


    /**
     * loginModel::selecionaUsuario()
     *
     * Verifica se login e senha especificados são válidos
     *
     * @access public
     * @author Janaína Paixão <janainap@gmail.com>
     * @since  v1.0
     */
    public function selecionaUsuario()
    { 
        
        #Instanciando entidade VsUsuarios
        $SisUsuarios = new SisUsuarios();
        $SisUsuarioLoja = new SisUsuarioLoja();
        $SisGrupoAcessoUsuario = new SisGrupoAcessoUsuario();
        
        $SisUsuarios->alias('u');
        $SisUsuarios->join($SisUsuarioLoja,'Left','l','codigoUsuario','codigoUsuario');
        $SisUsuarios->join($SisGrupoAcessoUsuario,'Left','g','codigoUsuario','codigoUsuario');
        
        $SisUsuarios->select('u.*,l.codigoLoja AS codigoLoja,g.codigoGrupoAcesso as codigoTipoUsuario');

        #Obtendo dados de identificação do usuário
        $usuario = $this->antiInjection($_POST['usuario']);
        $senha = $this->antiInjection($_POST['senha']);

        #Criptografando senha para comparação no banco de dados
        $senha2="HpTarefas!@9".$senha."545421212"; 
        $senha = md5($senha2);

        #Verificando se usuário e senha são válidos
        //Indica os parâmetros para a consulta
        $SisUsuarios->login = $usuario;
        $SisUsuarios->senha = $senha;


        //Faz a consulta
        try{
            
            $SisUsuarios->find();
            //Lumine_Util::showResult($SisUsuarios); echo 'aki'; exit();
             
        } catch ( exception $e )    { 
	      
            $exception = $e->getCode() . " - ";
	        $exception .= $e->getMessage() . "\n";
	        $exception .= "Arquivo: " . $e->getFile() . "\n";
	        $exception .= "Linha: " . $e->getLine();
	        echo $exception; exit();
            return false;
	        
        }
       

        return $SisUsuarios;


    }


    /**
     * loginModel:::selecionaAutenticacao()
     *
     * Obtem a chave de acesso criptografada atual, gravada no banco de dados, referente ao usuário especificado.
     * @public public
     * @param string $usuario - Nome do usuário.
     * @author Janaína Paixão <janainap@gmail.com>
     * @since  v1.0
     */
    public function selecionaAutenticacao($usuario)
    {

        $SisAutenticacao = new SisAutenticacao();
        $SisAutenticacao->login = $usuario;
        $SisAutenticacao->find();
        return $SisAutenticacao;

    }
    
    
     /**
     * loginModel::atualizaAutenticacao()
     * 
     * Registra ou atualiza, no banco de dados a chave de acesso criptografada refrente ao usuário especificado.
     * 
     * @access public
     * @param int $codigo_usuario - Refere-se ao código do usuário cuja chaves deve ser atualizada.
     * @param int $login - Refere-se ao nome de usuário cuja chave deve ser criptografada.
     * @param int $tipo_usuario- Refere-se ao tipo de usuário.
     * @param int $codigo - Refere-se a própria chave de acesso criptografada.
     * @author Janaína Paixão <janainap@gmail.com>
     * @since  v1.0
     */
    public function desconecta($login)
    { 
       
        try{
            $SisAutenticacao = new SisAutenticacao();    
            $SisAutenticacao->get($login);
            $SisAutenticacao->logado = '0';
            $SisAutenticacao->save();
           
        }
		catch (exception $e)
		{

			$exception = $e->getCode() . " - ";
			$exception .= $e->getMessage() . "\n";
			$exception .= "Arquivo: " . $e->getFile() . "\n";
			$exception .= "Linha: " . $e->getLine();

			echo $exception;


		}
        return true;
    }

    /**
     * loginModel::atualizaAutenticacao()
     * 
     * Registra ou atualiza, no banco de dados a chave de acesso criptografada refrente ao usuário especificado.
     * 
     * @access public
     * @param int $codigo_usuario - Refere-se ao código do usuário cuja chaves deve ser atualizada.
     * @param int $login - Refere-se ao nome de usuário cuja chave deve ser criptografada.
     * @param int $tipo_usuario- Refere-se ao tipo de usuário.
     * @param int $codigo - Refere-se a própria chave de acesso criptografada.
     * @author Janaína Paixão <janainap@gmail.com>
     * @since  v1.0
     */
    public function atualizaAutenticacao($codigo_usuario, $login, $tipo_usuario, $codigo)
    { 

        $SisAutenticacao = new SisAutenticacao();

        
        //Verificando a existencia do registro
        $SisAutenticacao->get($login);
        $SisAutenticacao->find();
        
            

        if ($SisAutenticacao->numRows()>0)
        { 
          
            $SisAutenticacao->codigoUsuario = $codigo_usuario;
            $SisAutenticacao->autenticacao = $codigo;
            $SisAutenticacao->ultimoAcesso = date("Y-m-d");
            $SisAutenticacao->logado = '1';
            
            try
            {

                $SisAutenticacao->update();

            }
            catch (exception $e)
            { 
                $exception=$e->getCode()." - ";
                $exception.=$e->getMessage()."\n";
                $exception.="Arquivo: ".$e->getFile()."\n";
                $exception.="Linha: ".$e->getLine();
       
                die("Não foi possível acessar o sistema..<BR>". $exception);

            }
     
        }else{
            
             $SisAutenticacao->codigoUsuario = $codigo_usuario;
            $SisAutenticacao->autenticacao = $codigo;
            $SisAutenticacao->ultimoAcesso = date("Y-m-d");
            
            
            try
            {

                $SisAutenticacao->insert();

            }
            catch (exception $e)
            { 
                $exception=$e->getCode()." - ";
                $exception.=$e->getMessage()."\n";
                $exception.="Arquivo: ".$e->getFile()."\n";
                $exception.="Linha: ".$e->getLine();
       
                die("Não foi possível acessar o sistema..<BR>". $exception);

            }
        }

    }


    /**
     * loginModel::verificaExistenciaUsuario()
     *
     * Função acionada quando existe o registro do usuário no banco de dados mas a senha digitada não está correta.
     * 
     * Atualiza o banco de dados somando 1 às tentativas de acesso do usuário que resultaram em falha e grava o IP do computador que fez a tentativa de acesso.
     * 
     * @access public
     * @author Janaína Paixão <janainap@gmail.com>
     * @since  v1.0
     */
    public function somaTentativaErro($codigo_usuario)
    {
        //Obtendo data e hora
        $informacao = date("d/m/Y h:i:s");

        //Obtendo IP
        $informacao .= "  " . $_SERVER['REMOTE_ADDR'];


        $SisUsuarios = new SisUsuarios();
        $SisUsuarios->get($codigo_usuario);
        $SisUsuarios->codigo_usuario = $codigo_usuario;
        $SisUsuarios->tentativas += 1;
        $SisUsuarios->ip = $SisUsuarios->ip . "\n" . $informacao;
        try
        {
            $SisUsuarios->save();
        }
        catch (exception $e)
        {
            $exception=$e->getCode()." - ";
			$exception.=$e->getMessage()."\n";
			$exception.="Arquivo: ".$e->getFile()."\n";
			$exception.="Linha: ".$e->getLine();
        	
            die("Não foi possível acessar o sistema.<BR>". $exception);
        }

    }

    /**
     * loginModel::zeraTentativaErro()
     * 
     * Atualiza o banco de dados zerando as tentativas de acesso do usuário que resultaram em falha.
     * 
     * @access public
     * @param int $codigo_usuario - Refere-se ao código do usuário cuja chaves deve ser atualizada.
     * @author Janaína Paixão <janainap@gmail.com>
     * @since  v1.0
     */
    public function zeraTentativaErro($codigo_usuario)
    {
        $SisUsuarios = new SisUsuarios();
        $SisUsuarios->get($codigo_usuario);
        $SisUsuarios->codigo_usuario = $codigo_usuario;
        $SisUsuarios->tentativas = 0;
        try
        {
            $SisUsuarios->save();
        }
        catch (exception $e)
        {
        	$exception=$e->getCode()." - ";
			$exception.=$e->getMessage()."\n";
			$exception.="Arquivo: ".$e->getFile()."\n";
			$exception.="Linha: ".$e->getLine();
        
            die("Não foi possível anular sa tentativas de acesso com erro do usuário.<BR>". $exception);
        }


    }
    
    
        /**
     * loginModel::obterGruposAcessoUsuario()
     * 
     * Obtém grupos de acesso dos quais o usuário faz parte
     * 
     * @access public
     * @param int $codigo_usuario - Refere-se ao código do usuário.
     * @author Janaína Paixão <janainap@gmail.com>
     * @since  v1.0
     */
    public function obterGruposAcessoUsuario($codigo_usuario)
    {
        $SisGrupoAcessoUsuario = new SisGrupoAcessoUsuario();
        $SisGrupoAcessoUsuario->codigoUsuario=$codigo_usuario;
    
        try
        {
            $SisGrupoAcessoUsuario->find();
            while($SisGrupoAcessoUsuario->fetch())
            {
                $s[]=$SisGrupoAcessoUsuario->codigoGrupoAcesso;
                            
            }     
            return $s;
        }
        catch (exception $e)
        {
        	$exception=$e->getCode()." - ";
			$exception.=$e->getMessage()."\n";
			$exception.="Arquivo: ".$e->getFile()."\n";
			$exception.="Linha: ".$e->getLine();
        	echo $exception; exit();
            $this->erro("--------------", "", "", "", $exception);
        }


    }

}
?>